package pe.gob.osinergmin.interfase_siaf.dac.dao.impl;

import java.util.List;

import javax.sql.DataSource;

import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.core.namedparam.SqlParameterSource;
import org.springframework.jdbc.core.simple.ParameterizedBeanPropertyRowMapper;
import org.springframework.stereotype.Repository;

import pe.gob.osinergmin.interfase_siaf.dac.dao.OrigenDao;
import pe.gob.osinergmin.interfase_siaf.dac.domain.Origen;

@Repository("origenDao")
public class OrigenDaoImpl implements OrigenDao {
	
	   private final Log logger = LogFactory.getLog(getClass());
		
		
		private NamedParameterJdbcTemplate jdbcParameterTemplateData;	
		private JdbcTemplate jdbcTemplateData;	
		
		
		
		@Autowired
		public void SetDataSource(DataSource dataSourceData){
			this.jdbcTemplateData = new JdbcTemplate(dataSourceData);
			this.jdbcParameterTemplateData = new NamedParameterJdbcTemplate(dataSourceData);
			
		}

		/**DECLARACION DE SQL**/
		/*private static final String SQL_SELECT_ORIGEN ="SELECT distinct (origen), nombre  FROM origen ";
		private static final String SQL_SELECT_ORIGEN_PARAMETER ="SELECT distinct (origen), nombre  FROM origen WHERE origen =:origen";
		private static final String SQL_SELECT_ORIGEN_PARAMETER1 ="SELECT distinct (origen), nombre  FROM origen WHERE nombre =:nombre";
		*/
		private static final String SQL_SELECT_ORIGEN ="SELECT origen, nombre, ano_eje  FROM origen ";
		private static final String SQL_SELECT_ORIGEN_PARAMETER ="SELECT  origen, nombre, ano_eje  FROM origen WHERE origen =:origen";
		private static final String SQL_SELECT_ORIGEN_PARAMETER1 ="SELECT origen, nombre, ano_eje  FROM origen WHERE ano_eje =:anoEje";
		private static final String SQL_SELECT_ORIGEN_PARAMETER2 ="SELECT origen, nombre, ano_eje  FROM origen WHERE ano_eje =:anoEje AND origen =:origen";

		private static final String SQL_SELECT_ORIGEN_PARAMETER3 ="SELECT COUNT (origen) FROM origen WHERE origen =:origen";

		@Override
		public List<Origen> listarOrigen() {
			logger.info("Ingresando a listar origen"); 
			RowMapper<Origen> lista = ParameterizedBeanPropertyRowMapper.newInstance(Origen.class);
			return this.jdbcTemplateData.query(SQL_SELECT_ORIGEN, lista);
		}
		@Override
		public List<Origen> listarOrigenParameter(Origen origen) {
			logger.info("Ingresando a listar origen parameters"); 
			SqlParameterSource parameters = new BeanPropertySqlParameterSource(origen);
			RowMapper<Origen> lista = ParameterizedBeanPropertyRowMapper.newInstance(Origen.class);
			if(StringUtils.isNoneBlank(origen.getAnoEje()) && StringUtils.isNoneBlank(origen.getOrigen())){
				return this.jdbcParameterTemplateData.query(SQL_SELECT_ORIGEN_PARAMETER2, parameters, lista);	
			}else if(StringUtils.isNoneBlank(origen.getAnoEje())){			
				return this.jdbcParameterTemplateData.query(SQL_SELECT_ORIGEN_PARAMETER1, parameters, lista);	
			}else if(StringUtils.isNoneBlank(origen.getOrigen())){ 
				return this.jdbcParameterTemplateData.query(SQL_SELECT_ORIGEN_PARAMETER, parameters, lista);	
			}else{
				return null;
			}		
		}	
		
		@Override
		public int verificarOrigen(Origen o) throws Exception {		 
			SqlParameterSource parameters = new BeanPropertySqlParameterSource(o);			
		    return this.jdbcParameterTemplateData.queryForInt(SQL_SELECT_ORIGEN_PARAMETER3, parameters);	
		}


}
